# -*- coding: utf-8 -*-
#!/usr/bin/env python

import sys
sys.path.append("lib/colorama-0.2.5")

import os
from database import *

from colorama import init, Fore
init()

"""
    Glówna klasa aplikacji
"""


class Application:
    chose = ""
    db = None
    display_help = False

    def __init__(self):
        self.db = Database()

        self.init_window()

    def init_window(self):
        os.system("cls")
        print Fore.GREEN + "Wypozyczalnia video"
        print Fore.WHITE

        if self.display_help:
            print "  l - Wyswietl liste filmow"
            print "  k - Wyswietl liste wypozyczen"
            print "  d - Dodaj film do wypozyczalni"
            print "  u - Usun film z wypozyczalni"
            print "  w - Wypozycz film"
            print "  o - Oddaj film"
            print "  q - Zamknij program"
            print "\n"

    """
        Wykonuje decyzję na podstawie wpisanego przez uzytkownika argumentu
    """
    def decision(self):
        self.init_window()

        argument_string = self.chose.strip().lower()

        """ Wyswietlanie pomocy """
        if argument_string == "h" or argument_string == "pomoc":
            self.display_help = not self.display_help
            self.init_window()


        if argument_string != "" and argument_string != "h" and argument_string != "pomoc" and argument_string != "d" and argument_string != "u" and argument_string != "w" and argument_string != "l" and argument_string != "k" and argument_string != "q" and argument_string != "o":
            print "Niepoprawny wybor!\n"

        """ Dodanie filmu do bazy """
        if argument_string == "d":
            self.add_video()

        """ Wypozyczenie filmu """
        if argument_string == "w":
            self.add_rent()

        """ Oddanie filmu """
        if argument_string == "o":
            self.return_movie()

        """ Wyświetlenie filmów """
        if argument_string == "l":
            self.get_videos()

        """ Wyświetlenie wypozyczeń """
        if argument_string == "k":
            self.get_rents()

        if argument_string == "u":
            self.delete_video()

    """
        Pobiera decyzje uzytkownika
    """
    def read(self):
        #self.init_window()

        prompt = "Wybor [h - "
        prompt += "pomoc" if not self.display_help else "ukryj pomoc"
        prompt +=  "]: "
        self.chose = raw_input(prompt)

        if self.chose != "q":
            return True
        else:
            return False

    """
        Wyświetla listę filmów w wypożyczalni
    """
    def get_videos(self):
        self.init_window()
        self.view_videos()

    def view_videos(self):
        rows = self.db.get_videos()

        if (not rows):
            print "Brak rekordow"

        else:
            for row in rows:
                print "  " + "[" + str(row[0]) + "] " + row[1].strip() + " (" + str(row[2]).strip() + "), " + row[3].strip()

        print "\n"

    """
        Dodanie nowego filmu
    """
    def add_video(self):
        self.init_window()
        print "Dodaj nowy film \n"
        print "Wpisz :q by anulowac"

        title = ""
        year = ""
        genre = ""

        while (title == ""):
            title = raw_input("Tytul: ")

            if (title == ":q"):
                return

        while (year == ""):
            year = raw_input("Rok: ")

            if (year == ":q"):
                return

        while (genre == ""):
            genre = raw_input("Gatunek: ")

            if (genre == ":q"):
                return

        rowid = self.db.add_video(title, year, genre)

        if (rowid is not None):
            print "Zatwierdzono, ID dodanego filmu: " + str(rowid)

    """
        Usunięcie filmu
    """
    def delete_video(self):

        self.init_window()

        print "Usun film"
        print "Wpisz :q by anulowac \n"

        id_del = ""
        delete_result = False
        are_there_rents = False

        while (not delete_result or id_del == ""):
            id_del = raw_input("Podaj ID [:h - pomoc]: ")

            if (id_del == ":q"):
                return

            # Wyświetl listę filmow
            elif (id_del == ":h"):
                self.view_videos()
                id_del = ""

            elif (id_del != ""):
                are_there_rents = self.check_rents(id_del)

                if (are_there_rents == True):
                    print "Film jest wypozyczony, nie mozna go usunac"
                    continue

                delete_result = self.db.delete_video(id_del)

                if (not delete_result):
                    print "Niepoprawne ID filmu"

                else:
                    print "Usunieto"


    def return_movie(self):
        self.init_window()

        print "Zwroc film \n"
        print "Wpisz :q by anulowac"

        rent_id = ""

        while (rent_id == ""):
            rent_id = raw_input("ID wypozyczenia [:h - pomoc]: ")

            if (rent_id == ":q"):
                return

            # Wyświetl listę wypozyczeń
            if (rent_id == ":h"):
                self.view_rents()
                rent_id = ""

        rowid = self.db.delete_rent(rent_id)

        if (rowid is not None):
            print "Zatwierdzono"

        return rowid

    """
        Wypożyczenie filmu
    """
    def add_rent(self):
        self.init_window()

        print "Wypozycz film \n"
        print "Wpisz :q by anulowac"

        movie_id = ""
        user_name = ""

        while (movie_id == ""):
            movie_id = raw_input("ID filmu [:h - pomoc]: ")

            if (movie_id == ":q"):
                return

            # Wyświetl listę filmow
            if (movie_id == ":h"):
                self.view_videos()
                movie_id = ""

        while (user_name == ""):
            user_name = raw_input("Nazwisko wypozyczjacego: ")

            if (user_name == ":q"):
                return

        rowid = self.db.add_rent(movie_id, user_name)

        if (rowid is not None):
            print "Zatwierdzono"

    def get_rents(self):
        self.init_window()
        self.view_rents()

    def view_rents(self):
        print "Lista wypozyczen:\n"

        rows = self.db.get_rents()

        if (not rows):
            print " Brak rekordow"

        else:
            for row in rows:
                print ("  " + "[" + str(row[0]) + "] " + row[1] + " (" + str(row[2]).strip() + "), " + row[3] + ", " + row[4]).encode('utf-8')

        print "\n"

    def check_rents(self, movie_id):
        return self.db.check_rents(movie_id)


